package com.music.glide.load.data

import com.music.glide.KPriority
import com.music.glide.load.KDataSource
import java.lang.Exception
import javax.sql.DataSource

/**
 * 延迟检索可用于加载资源的数据。
 * com.bumptech.glide.load.model.ModelLoader
 * 为每个资源加载创建一个新实例。对于任何给定的加载，可能会也可能不会调用
 * loadData(Priority, DataFetcher.DataCallback)，具体取决于是否缓存了相应的资源。
 * 取消也可能被调用，也可能不被调用。如果 loadData(Priority, DataFetcher.DataCallback)} 被调用，
 * 那么 cleanup() 将被调用
 *
 */
interface KDataFetcher<T> {


    interface DataCallback<T> {

        fun onDataReady(data: T)

        fun onLoadFailed(e: Exception)
    }

    fun loadData(priority: KPriority, callback: DataCallback<in T>)

    fun cleanup()

    fun cancel()

    fun getDataClass(): Class<T>

    fun getDataSource(): KDataSource

}